import numpy as np

# 创建数组示例
print("=== 创建数组示例 ===")
# 从列表创建数组
arr1 = np.array([1, 2, 3, 4, 5])
print("从列表创建的数组:")
print(arr1)

# 创建多维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("\n二维数组:")
print(arr2)

# 特殊数组创建
print("\n零数组:")
zeros_arr = np.zeros((3, 4))
print(zeros_arr)

print("\n.ones数组:")
ones_arr = np.ones((2, 3))
print(ones_arr)

print("\n单位矩阵:")
identity_arr = np.eye(3)
print(identity_arr)

print("\n等差数组:")
range_arr = np.arange(0, 10, 2)
print(range_arr)

print("\n等间距数组:")
linspace_arr = np.linspace(0, 1, 5)
print(linspace_arr)

# 数组属性
print("\n=== 数组属性 ===")
arr3 = np.array([[1, 2, 3], [4, 5, 6]])
print("数组:")
print(arr3)
print(f"形状: {arr3.shape}")
print(f"维度: {arr3.ndim}")
print(f"元素总数: {arr3.size}")
print(f"数据类型: {arr3.dtype}")

# 数组索引和切片
print("\n=== 数组索引和切片 ===")
arr4 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print("原始数组:")
print(arr4)

print("\n访问元素 [1, 2]:")
print(arr4[1, 2])

print("\n切片 [1:, 1:3]:")
print(arr4[1:, 1:3])

print("\n布尔索引:")
bool_idx = arr4 > 5
print("大于5的元素:")
print(arr4[bool_idx])

# 数组运算
print("\n=== 数组运算 ===")
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print("数组 a:")
print(a)
print("数组 b:")
print(b)

print("\n数组相加:")
print(a + b)

print("\n数组相乘(元素级):")
print(a * b)

print("\n数组点积:")
print(np.dot(a, b))

# 数学函数
print("\n=== 数学函数 ===")
arr5 = np.array([0, 30, 60, 90])
print("角度数组:")
print(arr5)

print("\n转换为弧度:")
radians = np.radians(arr5)
print(radians)

print("\n正弦值:")
print(np.sin(radians))

print("\n平方根:")
arr6 = np.array([1, 4, 9, 16])
print(f"数组: {arr6}")
print(f"平方根: {np.sqrt(arr6)}")

# 统计函数
print("\n=== 统计函数 ===")
arr7 = np.array([[1, 2, 3], [4, 5, 6]])
print("数组:")
print(arr7)

print(f"\n数组总和: {np.sum(arr7)}")
print(f"每列的和: {np.sum(arr7, axis=0)}")
print(f"每行的和: {np.sum(arr7, axis=1)}")
print(f"数组平均值: {np.mean(arr7)}")
print(f"数组标准差: {np.std(arr7)}")
print(f"数组最大值: {np.max(arr7)}")
print(f"数组最小值: {np.min(arr7)}")

# 数组形状操作
print("\n=== 数组形状操作 ===")
arr8 = np.arange(12)
print("一维数组:")
print(arr8)

# 改变形状
reshaped_arr = arr8.reshape(3, 4)
print("\n重塑为3x4数组:")
print(reshaped_arr)

print("\n转置:")
print(reshaped_arr.T)

# 数组连接和分割
print("\n=== 数组连接和分割 ===")
x = np.array([[1, 2], [3, 4]])
y = np.array([[5, 6], [7, 8]])

print("数组 x:")
print(x)
print("数组 y:")
print(y)

print("\n垂直连接:")
print(np.vstack((x, y)))

print("\n水平连接:")
print(np.hstack((x, y)))

# 随机数生成
print("\n=== 随机数生成 ===")
print("随机浮点数数组 (0-1):")
random_arr = np.random.random((2, 3))
print(random_arr)

print("\n随机整数数组 (1-10):")
random_int_arr = np.random.randint(1, 10, size=(3, 3))
print(random_int_arr)

print("\n正态分布随机数:")
normal_arr = np.random.normal(0, 1, 5)
print(normal_arr)

# 线性代数运算
print("\n=== 线性代数运算 ===")
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

print("矩阵 A:")
print(A)
print("矩阵 B:")
print(B)

print("\n矩阵乘法:")
print(np.dot(A, B))

print("\n矩阵行列式:")
print(np.linalg.det(A))

print("\n矩阵逆:")
print(np.linalg.inv(A))

# 广播机制
print("\n=== 广播机制 ===")
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])

print("数组 a:")
print(a)
print("数组 b:")
print(b)

print("\na + b (广播):")
print(a + b)

# 条件函数
print("\n=== 条件函数 ===")
arr9 = np.array([1, -1, 2, -2, 3, -3])
print("原数组:")
print(arr9)

print("\n绝对值:")
print(np.abs(arr9))

print("\n大于0的元素:")
print(np.where(arr9 > 0, arr9, 0))

# 文件操作示例 (注释掉实际执行部分)
print("\n=== 文件操作示例 ===")
print("# 保存数组到文件:")
print("# np.save('array.npy', arr1)")
print("\n# 从文件加载数组:")
print("# loaded_arr = np.load('array.npy')")
print("\n# 保存为文本文件:")
print("# np.savetxt('array.txt', arr1)")
print("\n# 从文本文件加载:")
print("# loaded_txt_arr = np.loadtxt('array.txt')")

print("\n=== 结束 ===")